qutebrowser 运行 Greasemonkey 脚本
qutebrowser 浏览器支持 Greasemonkey。
使用方法:
- 将脚本放置到
<data>/greasemonkey/
目录下 - (该目录可通过
:version
命令查看)
限制:
GM_xmlhttpRequest
不支持跨域- 添加 UI 元素的功能不支持,FAQ 中提到了上下文菜单和后台页面
实践
这里以 药方 (YAWF) (greasyfork.org) 脚本为例,实验一下。
我使用 Arch Linux,data 目录为 /home/maxiee/.local/share/qutebrowser
。
将脚本移入目录,通过 :greasemonkey-reload
命令重载脚本。
从程序日志中看到脚本被加载:
23:21:27 INFO: Loaded Greasemonkey scripts:
Yet Another Weibo Filter
但是我发现脚本没有生效。查看控制台:
caught TypeError: Cannot read properties of null (reading 'addEventListener')
at userscript:GM-https://github.com/tiansh/Yet Another Weibo Filter:3255:28
at userscript:GM-https://github.com/tiansh/Yet Another Weibo Filter:3806:2
at userscript:GM-https://github.com/tiansh/Yet Another Weibo Filter:19280:3
05
在 devtools 里可以很方便地给脚本下断点。报错行的代码是:
document.documentElement.addEventListener(key, function (event) {
通过 debug,看到 document.documentElement
是 null
,空指针异常了。
遍历整个脚本,对于 documentElement
都是直接拿来用,没有赋值的地方,这说明应该 Greasemonkey 将这个值准备好才是。
查看 GitHub,找到相关 issue:Qt 5.12: document.documentElement is null in GM_addStyle · Issue #4322 · qutebrowser/qutebrowser
原来是对 Greasemonkey 元数据的 @run-at
实现不一致导致的:
- 脚本中赋值为
document-start
- 在 qutebrowser 中,这个时机太早了,
documentElement
还没生成出来 - 手动改成
document-end
后,脚本正常执行
至此,Greasemonkey 在 qutebrowser 中顺利运行起来了。
网络资源
本文作者:Maeiee
本文链接:qutebrowser 运行 Greasemonkey 脚本
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!